home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 October: Mac OS SDK / Dev.CD Oct 96 SDK / Dev.CD Oct 96 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / OS / FWToolbx / Sources / PRCursor.cpp < prev    next >
Encoding:
Text File  |  1996-08-16  |  4.9 KB  |  165 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                PRCursor.cpp
  4. //    Release Version:    $ ODF 1 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWOS.hpp"
  11.  
  12. #ifndef PRCURSOR_H
  13. #include "PRCursor.h"
  14. #endif
  15.  
  16. #ifndef FWPRIDEB_H
  17. #include "FWPriDeb.h"
  18. #endif
  19.  
  20. #ifndef FWRESOUR_H
  21. #include "FWResour.h"
  22. #endif
  23.  
  24. #if defined(FW_BUILD_MAC) && !defined(__RESOURCES__)
  25. #include <Resources.h>
  26. #endif
  27.  
  28. #if defined(FW_BUILD_MAC) && !defined(__TOOLUTILS__)
  29. #include <ToolUtils.h>
  30. #endif
  31.  
  32. #if defined(FW_BUILD_MAC) && !defined(__LOWMEM__)
  33. #include <LowMem.h>
  34. #endif
  35.  
  36. #ifndef SOM_Module_OpenDoc_Errors_defined
  37. #include <ErrorDef.xh>
  38. #endif
  39.  
  40. //========================================================================================
  41. //    Runtime Informations
  42. //========================================================================================
  43.  
  44. #ifdef FW_BUILD_MAC    
  45. #pragma segment fwtoolbx
  46. #endif
  47.  
  48. //========================================================================================
  49. //    Cursor API
  50. //========================================================================================
  51.  
  52. //----------------------------------------------------------------------------------------
  53. //  FW_PrivLoadSystemCursor 
  54. //----------------------------------------------------------------------------------------
  55.  
  56. static FW_PlatformCursorHandle FW_PrivLoadSystemCursor(Environment* ev, FW_CursorID cursorID, FW_Boolean& isMacColorCursor)
  57. {
  58.     FW_PlatformCursorID platformCursorID = (FW_PlatformCursorID) (cursorID & FW_kCursorIDMask);
  59.     
  60.     // do not use the resource component because we're loading from the system
  61.     FW_PlatformCursorHandle cursorHandle = NULL;
  62.     isMacColorCursor = FALSE;
  63.     
  64. #ifdef FW_BUILD_MAC        
  65.     // try a mono cursor first
  66.     cursorHandle = ::GetCursor(platformCursorID);
  67.  
  68.     if (cursorHandle == NULL)
  69.     {
  70.         // no mono cursor, try a color cursor
  71.         cursorHandle = (FW_PlatformCursorHandle) ::GetCCursor(platformCursorID);
  72.         isMacColorCursor = TRUE;
  73.     }
  74.  
  75.     if (cursorHandle != NULL)
  76.     {
  77.         // ----- We need to detache the resource because of CFM -----
  78.         ::DetachResource((FW_PlatformHandle)cursorHandle);
  79.         ::HNoPurge((FW_PlatformHandle)cursorHandle);    // The resource may have been tagged purgeable
  80.     }
  81. #endif
  82.  
  83. #ifdef FW_BUILD_WIN
  84.     cursorHandle = ::LoadCursor(NULL, platformCursorID);
  85. #endif
  86.  
  87.     if (cursorHandle == NULL)
  88.         FW_SetEvError(ev, FW_xResourceNotFound);
  89.         
  90.     return cursorHandle;
  91. }
  92.  
  93. //----------------------------------------------------------------------------------------
  94. //  FW_PrivLoadUserCursor 
  95. //----------------------------------------------------------------------------------------
  96.  
  97. static FW_PlatformCursorHandle FW_PrivLoadUserCursor(Environment* ev, FW_Instance instance, FW_CursorID cursorID, FW_Boolean& isMacColorCursor)
  98. {
  99.     FW_ASSERT(instance != NULL);
  100.  
  101.     FW_PlatformCursorID platformCursorID = (FW_PlatformCursorID) (cursorID & FW_kCursorIDMask);
  102.  
  103.     FW_PlatformCursorHandle cursorHandle = NULL;
  104.     FW_VOLATILE(cursorHandle);
  105.     
  106.     isMacColorCursor = FALSE;
  107.  
  108.     FW_TRY
  109.     {
  110.         FW_CSharedLibraryResourceFile resourceFile(ev, instance);
  111.  
  112. #ifdef FW_BUILD_MAC
  113.         if(resourceFile->PrivHasSpecialResource(ev, platformCursorID, FW_kCursor))
  114.         {
  115.             isMacColorCursor = TRUE;
  116.             cursorHandle = (FW_PlatformCursorHandle)resourceFile->PrivGetSpecialResource(ev, platformCursorID, FW_kCursor);
  117.         }
  118.         else
  119.         {
  120.             isMacColorCursor = FALSE;
  121.             cursorHandle = (FW_PlatformCursorHandle)resourceFile->PrivGetSpecialResource(ev, platformCursorID, FW_kBlackWhiteCursor);
  122.         }
  123.         
  124.         // ----- We need to detache the resource because of CFM -----
  125.         ::DetachResource((FW_PlatformHandle)cursorHandle);
  126.         ::HNoPurge((FW_PlatformHandle)cursorHandle);    // The resource may have been tagged purgeable
  127. #endif
  128.  
  129. #ifdef FW_BUILD_WIN
  130.         cursorHandle = (FW_PlatformCursorHandle)resourceFile->PrivGetSpecialResource(ev, (unsigned short) (unsigned long) platformCursorID, FW_kCursor);
  131. #endif
  132.     }
  133.     FW_CATCH_BEGIN 
  134.     FW_CATCH_REFERENCE(FW_XException, exception)
  135.     {
  136.         FW_SetException(ev, exception);
  137.     }
  138.     FW_CATCH_EVERYTHING () 
  139.     {
  140.         FW_SetEvError(ev, kODErrUndefined);
  141.     }
  142.     FW_CATCH_END
  143.     
  144.     return cursorHandle;
  145. }
  146.  
  147. //----------------------------------------------------------------------------------------
  148. //  FW_PrivLoadCursor 
  149. //----------------------------------------------------------------------------------------
  150.  
  151. FW_PlatformCursorHandle SL_API FW_PrivLoadCursor(Environment* ev, FW_Instance instance, FW_CursorID cursorID, FW_Boolean& isMacColorCursor)
  152. {
  153.     // No try block necessary - Do not throw
  154.     // Note: a NULL handle is returned on failure.
  155.  
  156.     if ((cursorID & FW_kCursorMask) == FW_kSystemCursor)
  157.         return FW_PrivLoadSystemCursor(ev, cursorID, isMacColorCursor);
  158.     else if ((cursorID & FW_kCursorMask) == FW_kODFCursor)
  159.         return FW_PrivLoadUserCursor(ev, FW_gInstance, cursorID, isMacColorCursor);
  160.     else
  161.         return FW_PrivLoadUserCursor(ev, instance, cursorID, isMacColorCursor);
  162. }
  163.  
  164.  
  165.